// 放置在CardMap中，暴露给外面使用的接口
// cardmap.vue中 showData方法调用了showAnimData
// import Map from 'ol/Map'

export default {
  data () {
    return {
      // oMap: null, // 地图对象;    简写对照 overlay[ovl], arrow[arw], sprite[spt], Endpoint[ept]
      fCount: 0.0 // 测试用计数器
    }
  },
  watch: {
    // watch
  },
  mounted () {
  },
  methods: {
    /**
     * @description 选择路径
     * @param {String} sFeatureID 路径的唯一标识符
     * @return {float} len 连点的长度
     */
    selAnimRoad (sFeatureID) {
      // console.log(this.$refs.iAnim.selectFeatureByID(sFeatureID))
      return this.$refs.iAnim.selectFeatureByID(sFeatureID)
    },
    /**
     * @description 清除选择路径及样式；不需要参数-有记录所选id
     */
    cleanAnimRoad () {
      // this.$refs.iAnim.cleanSelFeatureByID()
      this.$refs.iAnim.cleanSelFeature()
    },
    /**
     * @description 获取路径上的点坐标
     * @param {string} sFeatureID 要获取坐标点的
     * @param {float} fraction 获取坐标的位置-线百分比
     * @return {Array} 线上坐标点位置
     */
    getLineCoordinateAt (sFeatureID, fraction) {
      return this.$refs.iAnim.getLineCoordinateAt(sFeatureID, fraction)
    },
    /**
     * @description 更新路径（line）气泡内容
     * @param {String} sFeatureID 路径的唯一标识符
     * @return {float} len 连点的长度
     */
    updateAnimBubbleByID (sFeatureID, oBubble) {
      console.log('update pop')
      this.$refs.iAnim.updateBubbleByID(sFeatureID, oBubble)
      this.$refs.iAnim.redrawAnimBubbleByID(sFeatureID)
    },
    /**
     * @description 清除动画层指定id元素的气泡--只是路径的
     * @param {String} sFeatureID 路径的唯一标识符
     */
    cleanAnimBubbleByID (sFeatureID) {
      console.log('clean pop by ID: ' + sFeatureID)
      this.$refs.iAnim.cleanOverlayByID(sFeatureID)
    },
    /**
     * @description 创建动画层气泡--路径的
     * @param {String} sFeatureID 路径的唯一标识符
     */
    createAnimBubbleByID (sFeatureID) {
      console.log('create pop by ID: ' + sFeatureID)
      this.$refs.iAnim.createOverlayByID(sFeatureID)
    },
    /**
     * @description 清除动画层指定id元素的气泡--路径的
     * @param {String} sFeatureID 路径的唯一标识符
     */
    cleanAllAnimBubble () {
      console.log('clean all pop')
      this.$refs.iAnim.cleanAllAnimOverlay()
    },
    /**
     * @description 重新绘制指定元素的气泡
     * @param {string} sFeatureID 要创建气泡的要素ID
     */
    redrawAnimBubbleByID (sFeatureID) {
      this.$refs.iAnim.redrawAnimBubbleByID(sFeatureID)
    },
    /**
     * @description 根据新的坐标移动sprite
     * @param {string} gID 批次或组id--sprite包含其中
     */
    moveSprite (gID, aNewCoord, sCoordSRS = 'EPSG:4326') {
      this.$refs.iAnim.moveSprite(gID, aNewCoord, sCoordSRS)
    },
    /**
     * @description 移动测试(调用一次移动一步)
     * @param {string} sFeatureID 要创建气泡的要素ID
     * @param {int} iNum 循环多少次走完
     */
    animSpite (sFeatureID, iNum) {
      const iStep = 1 / iNum
      this.fCount += iStep
      const lineID = this.$refs.iAnim.getSpriteLineID(sFeatureID)
      const aCoord = this.getLineCoordinateAt(lineID, this.fCount)
      this.moveSprite(sFeatureID, aCoord, 'EPSG:3857')
      if (this.fCount > 1) this.fCount = 0
      this.$refs.iAnim.updateSpriteBaseInfo(sFeatureID, this.fCount)
    },
    /**
     * @description 根据ID选择精灵对象,只要提供id知道是精灵对象，即可选择；
     * @param {string} sGID 唯一标识--如:选择的路径id  内部添加‘spt_前缀’
     * @return {object} 气泡信息--如果有的话，否则null
     */
    selectSpriteByID (sGID) {
      // console.log(this.$refs.iAnim.selectSpriteByID(sGID))
      return this.$refs.iAnim.selectSpriteByID(sGID)
    },
    selectSpriteByGIDIO (sGID) {
      return this.$refs.iAnim.selectSpriteByGID(sGID)
    },
    cleanSelSpriteByGIDIO (sGID) {
      return this.$refs.iAnim.cleanSelSpriteByGID(sGID)
    },
    /**
     * @description 更新指定Feature的气泡信息
     * @param {String} gID 要更新气泡的featrue的id
     * @param {Object} oBubble 要更新的气泡对象 {新气泡中的数据，存在更新，不存在添加}
     * @param {String} sPrefix 前缀
     */
    updateSpriteBubbleByID (gID, oBubble, sPrefix = 'spt_') {
      return this.$refs.iAnim.cleanSpriteBubbleByID(gID, oBubble, sPrefix)
    },
    /**
     * @description 删除指定精灵的气泡
     * @param {string} gID 要素ID, 还要要知道是精灵 才能调用此方法
     */
    cleanSpritOverlayByID (gID, sPrefix = 'spt_') {
      this.$refs.iAnim.cleanSpritOverlayByID(gID, sPrefix)
    },
    /**
     * @description 创建指定的精灵气泡
     * @param {string} gID 要素ID, 需要知道精灵对象，调用此方法
     * @param {string} sPrefix 前缀
     */
    createSpritOverlayByID (gID, sPrefix = 'spt_') {
      this.$refs.iAnim.createSpritOverlayByID(gID, sPrefix)
    },
    /**
     * @description 修改精灵状态
     * @param {string} gID 要素ID, 需要知道精灵对象，调用此方法
     * @param {string} sState 状态（normal，warn，error）
     * @param {Object} oBubble 气泡信息对象（可以添加或修改内容）
     * @param {string} sPrefix 前缀
     */
    changeSpriteState (gID, sState, oBubble, sPrefix = 'spt_') {
      // const sSpritID = sPrefix + gID
      const sIconSrc = this.$refs.iAnim.getSpriteImg(gID) // 获取精灵的Icon图片Src路径字符串
      const aPathName = this.$refs.iAnim.getFilePathName(sIconSrc) // 获取字符串中的路径和文件名
      let bHighlight = false
      let sImgSrc = null
      if (aPathName[1].indexOf('_hl') !== -1) { // 精灵是否高亮（被选中状态）
        bHighlight = true
        sImgSrc = aPathName[1].replace('_hl', '')
      } else {
        sImgSrc = aPathName[1]
      }
      // 清除原有状态标志
      // if (aPathName[1].indexOf('_normal')) { // normal，warn，error, info
      if (sImgSrc.indexOf('_normal')) {
        sImgSrc = sImgSrc.replace('_normal', '')
      }
      // if (aPathName[1].indexOf('_warn')) { // normal，warn，error, info
      if (sImgSrc.indexOf('_warn')) {
        sImgSrc = sImgSrc.replace('_warn', '')
      }
      // if (aPathName[1].indexOf('_error')) { // normal，warn，error, info
      if (sImgSrc.indexOf('_error')) {
        sImgSrc = sImgSrc.replace('_error', '')
      }
      // if (aPathName[1].indexOf('_info')) { // normal，warn，error, info
      if (sImgSrc.indexOf('_info')) {
        sImgSrc = sImgSrc.replace('_info', '')
      }
      // 生成图片--图片包含后缀时去掉后缀
      const aTmp = sImgSrc.split('.')
      sImgSrc = aTmp[0]
      // 根据当前要设置的状态（sState）创建新的ImgSrc
      if (sState === 'warn' || sState === 'error' || sState === 'info') {
        sImgSrc = sImgSrc + '_' + sState
      }
      if (bHighlight) {
        sImgSrc = sImgSrc + '_hl'
      }
      // 修改sprite的图片
      this.$refs.iAnim.changeSpriteIcon(gID, sImgSrc, sPrefix)
      // 修改sprite的气泡
      this.$refs.iAnim.updateSpriteBubbleByID(gID, oBubble, sPrefix)
      // 修改状态表示位
      this.$refs.iAnim.changeSpriteState(gID, sState, sPrefix)
    },
    /**
     * @description 清除精灵状态--事件处理完成后回复成normal状态
     * @param {string} gID 要素ID, 需要知道精灵对象，调用此方法
     * @param {string} sState 状态（normal，warn，error，info）
     * @param {Object} oBubble 气泡信息对象（更新）
     * @param {string} sPrefix 前缀
     */
    cleanSpriteState (gID, sState = 'normal', oBubble = null, sPrefix = 'spt_') {
      // const sSpritID = sPrefix + gID
      const sIconSrc = this.$refs.iAnim.getSpriteImg(gID) // 获取精灵的Icon图片Src路径字符串
      const aPathName = this.$refs.iAnim.getFilePathName(sIconSrc)
      oBubble = oBubble || { state: 'normal' }
      let bHighlight = false
      let sImgSrc = null
      if (aPathName[1].indexOf('_hl') !== -1) { // 精灵是否高亮（被选中状态）
        bHighlight = true
        sImgSrc = aPathName[1].replace('_hl', '')
        console.log(aPathName[1])
      } else {
        sImgSrc = aPathName[1]
      }
      if (sImgSrc.indexOf('_normal')) { // normal，warn，error, info
        sImgSrc = sImgSrc.replace('_normal', '')
      }
      if (sImgSrc.indexOf('_warn')) { // normal，warn，error, info
        sImgSrc = sImgSrc.replace('_warn', '')
      }
      if (sImgSrc.indexOf('_error')) { // normal，warn，error, info
        sImgSrc = sImgSrc.replace('_error', '')
      }
      if (sImgSrc.indexOf('_info')) { // normal，warn，error, info
        sImgSrc = sImgSrc.replace('_info', '')
      }
      // 生成图片--图片包含后缀时去掉后缀
      const aTmp = sImgSrc.split('.')
      console.log(aTmp)
      sImgSrc = aTmp[0]
      // 清除就是回复成normal状态；normal状态图片不加—normal后缀
      if (bHighlight) {
        sImgSrc = sImgSrc + '_hl'
      }
      // 修改sprite的图片
      this.$refs.iAnim.changeSpriteIcon(gID, sImgSrc, sPrefix)
      // 删除sprite的气泡对应信息
      this.$refs.iAnim.updateSpriteBubbleByID(gID, oBubble, sPrefix)
      // 修改状态表示位
      this.$refs.iAnim.changeSpriteState(gID, sState, sPrefix)
    },

    /**
     * @description 清除动画层所有数据
     */
    clearAnimLayerData () {
      this.$refs.iAnim.clearAllData()
      this.$refs.iAnim.cleanAllAnimOverlay()
    },

    /**
    * @description webSocket测试
    */
    testSocket () {
      // 需要安装：npm install socket.io-client
      this.$refs.iAnim.initSocket()
    },
    // debug get socket dict infos
    testDictInfos () {
      this.$refs.iAnim.test()
    },
    /**
    * @description 初始化socket
    */
    initSocket () {
      // 需要安装：npm install socket.io-client
      this.$refs.iAnim.initSocket()
    },
    /**
    * @description 加入指定的聊天室
    * @param {string} sRoom 要加入的房间名称,我们用任务id作为房间名称taskid
    * @param {Object} Data 房间参数；这里是任务关联的北斗卡id
    */
    joinTrackRoom (sRoom, data) {
      this.$refs.iAnim.joinTrackRoom(sRoom, data)
      // 测试数据
      // this.$refs.iAnim.joinTrackRoom('room1', ['CAR1', 'CAR2', 'CAR3'])
      // this.$refs.iAnim.joinTrackRoom('room2', ['CAR4', 'CAR5', 'CAR6'])
      // this.$refs.iAnim.joinTrackRoom('room3', ['CAR9', 'CAR8', 'CAR7'])
    },
    /**
    * @description 退出指定的聊天室
    * @param {string} sRoom 要退出的房间名称,我们用任务id作为房间名称taskid
    * @param {string} socketID 要退出聊天室的socketid，默认为null后台处理
    */
    leaveTrackRoom (sRoom, socketID = null) {
      this.$refs.iAnim.leaveTrackRoom(sRoom, socketID)
    },
    /**
    * @description 退出所有房间
    */
    leaveAllTrackRoom () {
      this.$refs.iAnim.leaveAllTrackRoom()
    },
    /**
    * @description 获取指定北斗卡最后位置（接收未完成，后台添加蓝图吧）
    */
    getTraceByID (sCardID) {
      this.$refs.iAnim.getTraceByID(sCardID)
    },
    /**
    * @description 获取指定北斗卡行动轨迹（接收未完成，后台添加蓝图吧）
    */
    getTrackByID (sCardID) {
      this.$refs.iAnim.getTrackByID(sCardID)
    },
    /**
     * @description 动画层需要使用，获取动画层用到的数据
     */
    getTargetByID (gID) {
      console.log('getTar')
      return this.$refs.iPoi.getPoiByID(gID)
    },
    ttt () {
      console.log('123')
      const data = { account: '3F434046D7D7475CDA50F1C38F01F3F1', lng: '0', lat: '0', sendTime: '2021-09-08 13:36:37' }
      this.$refs.iAnim.updatePOILocation(data)
    }
  }
}
